package com.tanhua.server.controller;

import cn.hutool.core.util.RandomUtil;
import com.tanhua.autoconfig.templates.SmsTemplate;
import com.tanhua.model.db.User;
import com.tanhua.server.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @program: tanhua
 * @description:
 * @author: MR.peng
 * @create: 2022-03-06 22:36
 **/

/*
*   用户登录的controller
* */

@RestController
@RequestMapping("/user")
public class LoginController {


    @Autowired
    private SmsTemplate smsTemplate;

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    private UserService userService;

    /*
    * 根据手机号码查询用户
    *   1.获取请求参数
    *  2.业务（业务极多，特别长）
    * 业务层，调用dubbo提供者，获取数据
    * 3.响应数据
    *
    * */
    @GetMapping("{mobile}")
    public User findByMobile(@PathVariable("mobile") String mobile ){
        //1.获取请求参数

        //2.业务层调用
        User user = userService.findByMobile(mobile);


        //3.响应数据
        return user;

    }
    /*
    * 第一步，发送验证码
    * 请求地址： POST /login
    * 请求参数：Body类型参数
    *   {
    *       "phone": "13800138000"
    *    }
    *
    *    参数多：抽取请求的实体类
    *    参数少：Map集合(Key就是json的key)
     * 返回值：
     *   void
     * */

    @PostMapping("/login")
    public ResponseEntity login(@RequestBody Map map){
            String mobile = map.get("phone").toString();

            //1.生成验证码
            // String code = RandomUtil.randomNumbers(6);
            //2.给手机发送验证码
            //smsTemplate.sendSms(mobile,code);//先注释，正式上线再放开
            String code = "123456";

            //3.为了登陆校验，验证码需要存储(redis)
            redisTemplate.opsForValue().set("CODE:"+mobile,code,5, TimeUnit.MINUTES);
            return ResponseEntity.ok(null);
    }


    /*
    * 登录第二步，根据手机号和验证码登录
    *   请求地址：/user/loginVerification
    *   Body参数：phone,verificationCode
    * */
    @PostMapping("/loginVerification")
    public ResponseEntity loginVerification(@RequestBody Map map){
            //1.获取请求参数
            String phone = map.get("phone").toString();
            String code = map.get("verificationCode").toString();
            //2.调用service完成业务
            Map retmap = userService.loginVerification(phone,code);
            //3.响应数据
           return ResponseEntity.ok(retmap);
    }
}

